﻿#pragma once
#include "AsGraphics.h"

__AS_JY(Update 2023.1.7)
namespace AsGraphicsNamespace {

	class AsGraphicsImageViewer;
	class AsGraphicsGeometricMeasurer;

	typedef class AS_GRAPHICS_API AsGraphicsFactory {
	public:
		struct tImageViewer {
			enum Type {
				Common1							// 常用类型1
				/*-----------------------------------------
					Common1 常用类型1：
					1. 支持鼠标左键拖动和滑轮锚定缩放
					2. 支持动态缩放与移动
					3. 支持全屏显示
					已应用：端塞项目
				-------------------------------------------*/
				,
				Common2							// 常用类型2
				/*-----------------------------------------
					Common2 常用类型2：
					1. 支持鼠标左键拖动和滑轮锚定缩放
					2. 支持动态缩放与移动
					3. 支持拖拽图片自动加载显示
					4. 支持全屏显示
				-------------------------------------------*/
				,
				Common3							// 常用类型3
				/*-----------------------------------------
					Common3 常用类型3：
					1. 支持鼠标左键拖动和滑轮锚定缩放
					2. 支持动态缩放与移动
					3. 支持拖拽图片自动加载显示
					4. 支持缩放百分比动态显示
					5. 支持全屏显示
					已应用：图像分析工具
				-------------------------------------------*/
				,
				ViewAdmire						// 观赏模式
				/*-----------------------------------------
					ViewAdmire 观赏模式：
					1. 支持全自动适应显示
					2. 支持鼠标锚定缩放
					3. 支持动态缩放与移动
					4. 支持图像平滑显示
					5. 支持全屏显示
				-------------------------------------------*/
				,
				AllPowerfull,					// 全能模式
				/*-----------------------------------------
					AllPowerfull 全能模式：
					1. 支持鼠标左键拖动和滑轮锚定缩放
					2. 支持动态缩放与移动
					3. 支持拖拽图片自动加载显示
					4. 支持缩放百分比动态显示
					5. 支持图像平滑
					6. 支持全自动适应显示
					7. 支持全屏显示
				-------------------------------------------*/
			};
		};

		struct tGeometricMeasurer {
			enum Type {
				Common1
			};
		};

	public:
		// 创建图像查看器
		static AsGraphicsImageViewer* createImageViewer(AsGraphics* graphics, tImageViewer::Type type = tImageViewer::Common1);

		// 创建图像查看窗口
		static QDialog* createImageViewerWindow(QImage image, QString windowTitle = "图像查看器", QSize windowSize = QSize(800, 600), tImageViewer::Type type = tImageViewer::ViewAdmire, QWidget* parent = nullptr);

		// 创建几何测量器
		static AsGraphicsGeometricMeasurer* createGeometricMeasurer(AsGraphics* graphics, tGeometricMeasurer::Type type = tGeometricMeasurer::Common1);


	} Factory;

};

namespace AG = AsGraphicsNamespace;

typedef AG::Factory AGF;

